6625
23999
Jeg har rotet med JSON i noen tid, bare presset den ut som tekst, og det har ikke skadet noen (som jeg vet om), men jeg vil begynne å gjøre ting ordentlig.
Jeg har sett så mange påståtte "standarder" for JSON-innholdstypen:
søknad / json
applikasjon / x-javascript
tekst / javascript
tekst / x-javascript
tekst / x-json
Men hvilken er riktig, eller best? Jeg oppdager at det er sikkerhets- og nettleserstøtteproblemer som varierer mellom dem.
Jeg vet at det er et lignende spørsmål, hvilken MIME-type hvis JSON returneres av en REST API?, Men jeg vil ha et litt mer målrettet svar. 
1
2
Neste
For JSON-tekst:
søknad / json
MIME-medietypen for JSON-tekst er application / json. Standard koding er UTF-8. (Kilde: RFC 4627).
For JSONP (JavaScript som kan kjøres) med tilbakeringing:
søknad / javascript
Her er noen blogginnlegg som ble nevnt i de relevante kommentarene:
Hvorfor du ikke bør bruke tekst / html for JSON
Internet Explorer har noen ganger problemer med applikasjon / json
En ganske komplett liste over Mimetypes og hva du skal bruke dem til
Den offisielle mimetypelisten på IANA fra @ gnrfans svar nedenfor
|
IANA har registrert den offisielle MIME-typen for JSON som applikasjon / json.
På spørsmål om hvorfor ikke tekst / json, synes Crockford å ha sagt at JSON egentlig ikke er JavaScript eller tekst, og IANA var mer sannsynlig å dele ut applikasjon / * enn tekst / *.
Flere ressurser:
Medietyper
Forespørsel om kommentarer 4627
bluesmoon: JSON har en type
|
For JSON:
Innholdstype: applikasjon / json
For JSON-P:
Innholdstype: applikasjon / javascript
|
Den riktige MIME-medietypen for JSON er selvfølgelig application / json, men det er nødvendig å innse hvilken type data som forventes i applikasjonen din.
For eksempel bruker jeg Ext GWT, og serverresponsen må gå som tekst / html, men inneholder JSON-data.
Kundesiden, Ext GWT skjema lytter
uploadForm.getForm (). addListener (ny FormListenerAdapter ()
{
@Overstyring
offentlig ugyldighet onActionFailed (skjemaform, int httpStatus, strengrespons tekst)
{
MessageBox.alert ("Feil");
}
@Overstyring
offentlig ugyldighet onActionComplete (skjema, int httpStatus, strengrespons tekst)
{
MessageBox.alert ("Suksess");
}
});
I tilfelle du bruker program / json-svarstype, foreslår nettleseren meg å lagre filen.
Kildekodebit på serversiden ved bruk av Spring MVC
returner nytt AbstractUrlBasedView ()
{
@SuppressWarnings ("ukontrollert")
@Overstyring
beskyttet tomrom renderMergedOutputModel (kartmodell, HttpServletRequest forespørsel,
HttpServletResponse respons) kaster Unntak
{
respons.setContentType ("tekst / html");
respons.getWriter (). skriv (json);
}
};
|
JSON:
Svaret er dynamisk genererte data, i samsvar med spørsmålsparametrene som sendes i URL-en.
Eksempel:
{"Name": "Foo", "Id": 1234, "Rank": 7}
Innholdstype: applikasjon / json
JSON-P:
JSON med polstring.
Svaret er JSON-data, med en funksjonsanrop viklet rundt det.
Eksempel:
functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7});
Innholdstype: applikasjon / javascript
|
Hvis du bruker Ubuntu eller Debian og serverer .json-filer via Apache, vil du kanskje servere filene med riktig innholdstype. Jeg gjør dette først og fremst fordi jeg vil bruke Firefox-utvidelsen JSONView
Apache-modulen mod_mime hjelper deg med å gjøre dette enkelt. Men med Ubuntu må du redigere filen /etc/mime.types og legge til linjen
søknad / json json
Start deretter Apache på nytt:
sudo service apache2 start på nytt
|
Hvis du ringer ASP.NET Web Services fra klientsiden, må du bruke application / json for at det skal fungere. Jeg tror dette er det samme for jQuery og Ext-rammene.
|
Den riktige innholdstypen for JSON er application / json MED mindre du bruker JSONP, også kjent som JSON with Padding, som faktisk er JavaScript, og den riktige innholdstypen vil være application / javascript.
|
Det er ingen tvil om at applikasjon / json er den beste MIME-typen for et JSON-svar.
Men jeg hadde litt erfaring der jeg måtte bruke applikasjon / x-javascript på grunn av noen komprimeringsproblemer. Mitt vertsmiljø er delt hosting med GoDaddy. De tillater meg ikke å endre serverkonfigurasjoner. Jeg hadde lagt til følgende kode i web.config-filen for å komprimere svar.
















Ved å bruke dette ble .aspx-sidene komprimert med g-zip, men JSON-svar var ikke. jeg la til

i statiske og dynamiske typer. Men dette komprimerer ikke JSON-svar i det hele tatt.
Etter det fjernet jeg denne nylig tilføyde typen og la til

i både de statiske og dynamiske typeseksjonene, og endret responstypen i
.ashx (asynkron behandler) til
applikasjon / x-javascript
Og nå fant jeg ut at JSON-svarene mine ble komprimert med g-zip. Så jeg personlig anbefaler å bruke
applikasjon / x-javascript
bare hvis du vil komprimere JSON-svarene dine på et delt hostingmiljø. Fordi i delt hosting tillater de deg ikke å endre IISkonfigurasjoner.
|
Bare når jeg bruker applikasjon / json som MIME-typen, har jeg følgende (per november 2011 med de nyeste versjonene av Chrome, Firefox med Firebug):
Ingen flere advarsler fra Chrome når JSON lastes fra serveren.
Firebug vil legge til en fane i svaret som viser deg JSON-dataene
formatert. Hvis MIME-typen er forskjellig, vil den bare vises som
'Svarinnhold'.
|
Ikke alt fungerer for innholdstypeapplikasjon / json.
Hvis du bruker Ext JS-skjema for å laste opp fil, må du være oppmerksom på at serverresponsen blir analysert av nettleseren for å opprette dokumentet for